/*******************************************************************************
 * This file is part of the EEG-database project
 * 
 *   ==========================================
 *  
 *   Copyright (C) 2013 by University of West Bohemia (http://www.zcu.cz/en/)
 *  
 *  ***********************************************************************************************************************
 *  
 *   Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 *   the License. You may obtain a copy of the License at
 *  
 *       http://www.apache.org/licenses/LICENSE-2.0
 *  
 *   Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 *   an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 *   specific language governing permissions and limitations under the License.
 *  
 *  ***********************************************************************************************************************
 *  
 *   EducationLevel.java, 2013/10/02 00:01 Jakub Rinkes
 ******************************************************************************/
package cz.zcu.kiv.eegdatabase.data.pojo;

import cz.zcu.kiv.eegdatabase.data.annotation.SolrField;
import cz.zcu.kiv.eegdatabase.data.annotation.SolrId;
import cz.zcu.kiv.eegdatabase.logic.indexing.IndexField;
import cz.zcu.kiv.formgen.annotation.FormId;
import cz.zcu.kiv.formgen.annotation.FormItem;

import javax.persistence.*;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import org.hibernate.annotations.GenericGenerator;

/**
 * EducationLevel generated by hbm2java
 */
@Entity
@Table(name = "EDUCATION_LEVEL")
public class EducationLevel implements Serializable {

	@SolrId
	@FormId
	private int educationLevelId;
	@SolrField(name = IndexField.TITLE)
	@FormItem(required = true)
	private String title;
	private int defaultNumber;
	private Set<Person> persons = new HashSet<Person>(0);
	private Set<ResearchGroup> researchGroups = new HashSet<ResearchGroup>(0);

	public EducationLevel() {
	}

	public EducationLevel(String title, int defaultNumber, Set<Person> persons,
			Set<ResearchGroup> researchGroups) {
		this.title = title;
		this.defaultNumber = defaultNumber;
		this.persons = persons;
		this.researchGroups = researchGroups;
	}

	@GenericGenerator(name = "generator", strategy = "increment")
	@Id
	@GeneratedValue(generator = "generator")
	@Column(name = "EDUCATION_LEVEL_ID", nullable = false, precision = 22, scale = 0)
	public int getEducationLevelId() {
		return this.educationLevelId;
	}

	public void setEducationLevelId(int educationLevelId) {
		this.educationLevelId = educationLevelId;
	}

	@Column(name = "TITLE")
	public String getTitle() {
		return this.title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	@Column(name = "IS_DEFAULT", precision = 1, scale = 0)
	public int getDefaultNumber() {
		return this.defaultNumber;
	}

	public void setDefaultNumber(int defaultNumber) {
		this.defaultNumber = defaultNumber;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "educationLevel")
	public Set<Person> getPersons() {
		return this.persons;
	}

	public void setPersons(Set<Person> persons) {
		this.persons = persons;
	}

	@ManyToMany(fetch = FetchType.LAZY)
	@JoinTable(name = "EDUCATION_LEVEL_GROUP_REL", joinColumns = { @JoinColumn(name = "EDUCATION_LEVEL_ID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "RESEARCH_GROUP_ID", nullable = false, updatable = false) })
	public Set<ResearchGroup> getResearchGroups() {
		return this.researchGroups;
	}

	public void setResearchGroups(Set<ResearchGroup> researchGroups) {
		this.researchGroups = researchGroups;
	}

}
